package com.yugao.fintech.antelope.base.model.module.config.param;

import com.alibaba.fastjson2.JSON;
import com.yugao.fintech.antelope.base.model.enums.ConfigKeyEnum;
import com.yugao.fintech.framework.assistant.utils.StringUtils;
import com.yugao.fintech.framework.desensitization.annotations.FieldSensitive;
import com.yugao.fintech.framework.desensitization.fieldsensitive.enums.StrategyType;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import org.springframework.stereotype.Component;

import javax.validation.constraints.NotEmpty;

/**
 * 微信公众号参数
 *

 */
@Getter
@Setter
@Component
@Accessors(chain = true)
public class WxMpParam extends BaseConfigParam<WxMpParam> {
    // 公众号信息
    /**
     * 公众号名称
     */
    @NotEmpty(message = "公众号名称不能为空")
    private String name;

    @NotEmpty(message = "公众号id")
    private String accountId;

    /**
     * 公众号二维码, 在创建的时候会自动调用微信相关api, 或者
     */
    private String qrCodeUrl;

    // 公众号开发信息
    /**
     * 应用ID
     */
    @NotEmpty(message = "应用ID不能为空")
    private String appId;

    /**
     * 应用密钥
     */
    @NotEmpty(message = "应用密钥不能为空")
    @FieldSensitive(StrategyType.RESERVE_4)
    private String appSecret;

    // 消息推送配置
    /**
     * 推送的地址
     */
    private String msgPushUrl;

    /**
     * 必须为英文或数字，长度为3-32字符。
     */
    @Length(min = 3, max = 32, message = "Token长度为3-32字符")
    @FieldSensitive(StrategyType.RESERVE_4)
    private String token;

    /**
     * 消息加密密钥由43位字符组成，可随机修改，字符范围为A-Z，a-z，0-9。
     */
    @Length(min = 1, max = 43, message = "消息加密密钥 长度1-43字符")
    @FieldSensitive(StrategyType.RESERVE_4)
    private String encodingAesKey;

    // 功能设置
    /**
     * 授权后返回的域名
     */
    private String authReturnUrl;
    /**
     * 业务域名
     */
    private String bizDomain;
    /**
     * JS接口安全域名
     */
    private String jsDomain;

    @Override
    protected WxMpParam jsonToObject(String json) {
        if (StringUtils.isEmpty(json)) {
            return new WxMpParam();
        }
        return JSON.parseObject(json, WxMpParam.class);
    }

    @Override
    public ConfigKeyEnum configKey() {
        return ConfigKeyEnum.WX_MP;
    }
}
